package Day020_NIO_AIO.demo2_NIO2_AIO;

/**
 * @author zhangyan
 * @date 2020/5/13 11:29
 */
/*
    同步与异步（synchronous/asynchronous）：
    同步是一种可靠的有序运行机制，进行同步操作时，后续的任务是等待当前调用返回，才会进行下一步
    而异步则相反，其他任务不需要等待当前调用返回，通常依靠事件、回调等机制来实现任务间次序关系

    阻塞与非阻塞：
    在进行阻塞操作时，当前线程会处于阻塞状态，无法从事其他任务，只有当条件就绪才能继续
    而非阻塞则是不管IO操作是否结束，直接返回，相应操作在后台继续处理

    AIO是异步IO的缩写，虽然NIO在网络操作中，提供了非阻塞的方法，但是NIO的IO行为还是同步的。
    对于NIO来说，我们的业务线程是在IO操作准备好时，得到通知，接着就由这个线程自行进行IO操作，IO操作本身是同步的。
    但是对AIO来说，则更加进了一步，它不是在IO准备好时再通知线程，而是在IO操作已经完成后，再给线程发出通知。
    因此AIO是不会阻塞的，此时我们的业务逻辑将变成一个回调函数，等待IO操作完成后，由系统自动触发。
    与NIO不同，当进行读写操作时，只须直接调用API的read或write方法即可。这两种方法均为异步的，对于读操作而言，
    当有流可读取时，操作系统会将可读的流传入read方法的缓冲区，并通知应用程序；
    对于写操作而言，当操作系统将write方法传递的流写入完毕时，操作系统主动通知应用程序。
    即可以理解为，read/write方法都是异步的，完成后会主动调用回调函数。

    在JDK1.7中，这部分内容被称作NIO.2 --> AIO 主要在Java.nio.channels包下增加了下面四个异步通道：
    AsynchronousSocketChannel               异步的SocketChannel
    AsynchronousServerSocketChannel         异步的ServerSocketChannel
    AsynchronousFileChannel                 异步的FileChannel
    AsynchronousDatagramChannel             异步的ServerDatagramChannel

    常用方法:
            获取服务器Channel通道对象: AsynchronousServerSocketChannel.open()
            绑定端口:AsynchronousServerSocketChannel.bind()  传入端口号(new InetSocketAddress)
            接收请求:accept()

            AsynchronousSocketChannel:
            读数据:使用Channel的read()
            写数据:使用Channel的write()

    CompletionHandler<V,A>，AIO中的时间处理接口:
            这个接口定义了如下两个方法，分别在异步操作成功和失败时被回调。
            void completed(V result, A attachment);
            void failed(Throwable exc, A attachment);

    同步连接: 有返回值, Future<> accept();
    异步连接: 无返回值,有回调函数

    同步读: 有返回值,Future<Integer> read(ByteBuffer dst);
    异步读: 无返回值,有回调函数  void read(ByteBuffer dst,A attachment,Complet)


 */
public class Test1_AIO概述 {
}
